package main

import (
	"crawler/utils"
	"fmt"
	"io"
	"io/ioutil"
	"net/http"
	"os"
	"regexp"
	"strconv"
	"strings"
)

var (
	regHref = `((ht|f)tps?)://[w]{0,3}.baidu.com/link\?[a-zA-z=0-9-\s]*`
)

func main() {
	if utils.CheckFile("./data/", "url.txt").Size() == 0 {
		firstStart()
	} else {
		utils.Timer()
	}
}

// firstStart 第一次启动
func firstStart() {
	var num int
	url := "http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=39042058_20_oem_dg&wd=golang%E5%AE%9E%E7%8E%B0&oq=golang%2520%25E5%2588%25A0%25E9%2599%25A4%25E6%2595%25B0%25E7%25BB%2584&rsv_pq=d9be28ec0002df1b&rsv_t=8017GWpSLPhDmKilZQ1StC04EVpUAeLEP90NIm%2Bk5pRh5R9o57NHMO8Gaxm1TtSOo%2FvtJj%2B98%2Fsc&rqlang=cn&rsv_enter=1&inputT=3474&rsv_sug3=16&rsv_sug1=11&rsv_sug7=100&rsv_sug2=0&rsv_sug4=4230"
	// 请求 url
	resp, _ := http.Get(url)
	// 读取相应内容
	body, _ := ioutil.ReadAll(resp.Body)
	// 正则处理
	reg := regexp.MustCompile(`((ht|f)tps?)://[w]{0,3}.baidu.com/link\?[a-zA-z=0-9-\s]*`)
	// 打开要写入的文件
	f, _ := os.OpenFile("./data/url.txt", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666)

	defer f.Close()

	// 遍历 reg 正则处理后的结果
	for _, d := range reg.FindAllString(string(body), -1) {
		// 打开写入文件
		ff, _ := os.OpenFile("./data/url.text", os.O_RDWR, 0666)
		// 读取文件的内容
		file, _ := ioutil.ReadAll(ff)
		// 分隔 reg 的结果
		dd := strings.Split(d, "")
		// 要写入的内容
		dddd := ""

		// 遍历结果
		for _, ddd := range dd {
			if ddd == "?" {
				ddd = `\?`
			}
			dddd += ddd
		}

		if utils.CheckRegexp(string(file), dddd, 0).(string) == "" {
			io.WriteString(f, d+"\n")
			fmt.Print("\n收集地址" + d + "\n")
			num++
		}
		ff.Close()
	}

	fmt.Print("\n首次收集网络地址：" + strconv.Itoa(len(reg.FindAllString(string(body), -1))) + "\n")
	fmt.Print("\n去重后网络地址数：" + strconv.Itoa(num))
	fmt.Print("\n\n首次储存成功！\n")
}
